from flask import Flask, request, jsonify
from langchain.prompts import PromptTemplate
from langchain_community.llms import OpenAI  # 更新导入
import os
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 添加跨域支持

# 设置 OpenAI API 密钥，参考 min3.py 进行修改
os.environ["OPENAI_API_KEY"] = "sk-fhfopxxokpblqjbivoyhwhftlbjwrgeddccbytodqipkaqum"
base_url = "https://api.siliconflow.cn/v1"
# 配置 SiliconFlow 的 OpenAI 兼容 API
llm = OpenAI(
    openai_api_base=base_url,
    api_key=os.environ.get("OPENAI_API_KEY"),
    #model_name="THUDM/GLM-4-32B-0414",
    model_name="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
    temperature=0.7,
    top_p=0.1,
    max_tokens=1024
)

# 定义 Prompt 模板
prompt_template = """ 

# 角色：
一个擅长用各种风格回怼别人的老哥/老姐

# 简介：
在网络上拥有丰富的怼人经验，熟悉各种网络热梗，能够根据不同的风格要求，用狠爽的语气回怼那些怼自己的人。

# 技能：
- 熟练运用网络热梗、阴阳怪气、灵魂反问等技巧进行回怼。
- 能够根据不同的风格（文艺、幽默、犀利、毒舌、暴躁）调整回怼的语言风格。
- 懂得把握回怼的尺度，避免过于低俗而被封号。

# 规则：
- 回怼的语气要又狠又爽，带点网络热梗、阴阳怪气或灵魂反问，让人看了直呼解压。
- 可以适当夸张、幽默，但别太脏，重点是让对方破防又无力反驳。
- 如果对方的话太蠢或看不懂，直接甩一句‘你脑子被门夹了？说人话！’。
- 不知道就说‘关你屁事’或‘你谁啊？’，别客气。

工作流程（输出中间步骤和中间执行结果）：
1. 分析对方怼人的内容{text}，理解其核心观点和意图。
2. 根据指定的风格{style}，选择合适的网络热梗、阴阳怪气或灵魂反问的方式。
3. 构建回怼语句，确保语气狠爽，符合风格要求，并且避免过于低俗。
4. 检查回怼语句是否符合规则，如有必要进行调整。

# 输出格式：
一段符合指定风格、语气狠爽、带网络热梗的回怼语句。"""


prompt = PromptTemplate(
    input_variables=["text", "style"],
    template=prompt_template,
)

def generate_response():
    data = request.get_json()
    text = data.get('text')
    style = data.get('style')
    if not text:
        return jsonify({"status": "error", "data": {"original": "", "result": ""}}), 400

    try:
        formatted_prompt = prompt.format(text=text, style=style)
        result = llm(formatted_prompt)
        # 去除 <think> 及其相关内容
        import re
        result = re.sub(r'.*?</think>', '', result, flags=re.DOTALL)
        result = result.strip()
        print(result)
        return jsonify({
            "status": "success",
            "data": {
                "original": text,
                "result": result
            }
        })
    except Exception as e:
        print(f"Error: {e}")
        return jsonify({"status": "error", "data": {"original": text, "result": str(e)}}), 500

if __name__ == '__main__':
    app.run(debug=True, port=5000)